package com.cs.common.config;


import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.*;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

@Configuration
@Slf4j
public class RabbitMQConfig {

//    @Bean
//    public Queue mailQueue() {
//        return new Queue(RabbitMqConstants.MQ_MAIL_QUEUE,
//                RabbitMqConstants.durable,
//                RabbitMqConstants.exclusive,
//                RabbitMqConstants.autoDelete);
//    }
//
//    @Bean
//    public Queue phoneQueue() {
//        return new Queue(RabbitMqConstants.MQ_PHONE_QUEUE,
//                RabbitMqConstants.durable,
//                RabbitMqConstants.exclusive,
//                RabbitMqConstants.autoDelete);
//    }
//
//    @Bean
//    public Queue topicQueueX() {
//        return new Queue(RabbitMqConstants.MQ_TOPIC_QUEUE_X,
//                RabbitMqConstants.durable,
//                RabbitMqConstants.exclusive,
//                RabbitMqConstants.autoDelete);
//    }
//
//    @Bean
//    public Queue topicQueueY() {
//        return new Queue(RabbitMqConstants.MQ_TOPIC_QUEUE_Y,
//                RabbitMqConstants.durable,
//                RabbitMqConstants.exclusive,
//                RabbitMqConstants.autoDelete);
//    }
//
//    /**
//     * 交换机(Exchange)
//     *
//     * @return
//     */
//    @Bean
//    public FanoutExchange fanoutExchange() {
//        return new FanoutExchange(RabbitMqConstants.MQ_FANOUT_EXCHANGE,
//                RabbitMqConstants.durable,
//                RabbitMqConstants.autoDelete);
//    }
//
//    /**
//     * Topic交换机
//     *
//     * @return
//     */
//    @Bean
//    public TopicExchange myTopicExchange() {
//        return new TopicExchange(RabbitMqConstants.MQ_TOPIC_EXCHANGE,
//                RabbitMqConstants.durable,
//                RabbitMqConstants.autoDelete);
//    }
//
//    @Bean
//    public Binding topicXBinding() {
//        return BindingBuilder.bind
//                        (topicQueueX())
//                .to(myTopicExchange())
//                .with("topic.xxx");
//    }
//
//    @Bean
//    public Binding topicYBinding() {
//        return BindingBuilder.bind
//                        (topicQueueY())
//                .to(myTopicExchange())
//                .with("topic.*");
//    }
//
//
//    @Bean
//    public Binding mailBinding() {
//        return BindingBuilder
//                .bind(mailQueue())
//                .to(fanoutExchange());
//    }
//
//    @Bean
//    public Binding phoneBinding() {
//        return BindingBuilder.bind(phoneQueue())
//                .to(fanoutExchange());
//    }
//
//
//    //------------------死信队列设计--------------------------
//
//    /**
//     * 死信(延迟)队列
//     * @return
//     */
//    @Bean
//    public Queue delayQueue(){
//        return new Queue(RabbitMqConstants.MQ_DELAY_QUEUE,
//                RabbitMqConstants.durable,
//                RabbitMqConstants.exclusive,
//                RabbitMqConstants.autoDelete);
//    }
//
//    /**
//     * 死信交换机
//     * @return
//     */
//    @Bean
//    public DirectExchange delayExchange(){
//        return new DirectExchange(RabbitMqConstants.MQ_DELAY_EXCHANGE,
//                RabbitMqConstants.durable,
//                RabbitMqConstants.autoDelete);
//    }
//
//    /**
//     * 死信交换机队列绑定
//     * @return
//     */
//    @Bean
//    public Binding delayBinding(){
//        return BindingBuilder.bind(delayQueue())
//                .to(delayExchange())
//                .with(RabbitMqConstants.MQ_DELAY_ROUTING_KEY);
//    }
//
//    @Bean
//    public DirectExchange normalExchange(){
//        return new DirectExchange(RabbitMqConstants.MQ_NORMAL_EXCHANGE,
//                RabbitMqConstants.durable,
//                RabbitMqConstants.autoDelete);
//    }
//
//    @Bean
//    public Queue normalQueue(){
//
//        Map<String, Object> map = new HashMap<>(2);
//        map.put("x-dead-letter-exchange",RabbitMqConstants.MQ_DELAY_EXCHANGE);
//        map.put("x-dead-letter-routing-key",RabbitMqConstants.MQ_DELAY_ROUTING_KEY);
//        return new Queue(
//                RabbitMqConstants.MQ_NORMAL_QUEUE,
//                RabbitMqConstants.durable,
//                RabbitMqConstants.exclusive,
//                RabbitMqConstants.autoDelete,
//                map);
//    }
//
//    @Bean
//    public Binding normalBinding(){
//        return BindingBuilder.bind(normalQueue())
//                .to(normalExchange())
//                .with(RabbitMqConstants.MQ_NORMAL_ROUTING_KEY);
//    }
//
//



}
